public class Main {
    public static void main(String[] args) {
        Outer03 outer03 = new Outer03();
        outer03.t1();

        //外部其他类使用成员内部类的两种方式：
        //1.outer03.new Inner03();相当于把new Inner03()当作是outer03成员
        Outer03.Inner03 inner03 = outer03.new Inner03();
        inner03.say();
        //第一种方法可以不用创建外部类，这样写：Outer03.Inner03 inner4 = new Outer03.Inner03();
        //2.在外部类中编写一个方法，返回内部类的实例
        Outer03.Inner03 inner03Instance = outer03.getInner03Instance();
        inner03Instance.say();
        //第二种方法如果将getInner03Instance()改成静态方法也可以不用创建外部类
    }
}
class Outer03{
    private int n1=10;
    public String name ="ysy";
    private void hi(){
        System.out.println("hi()方法...");
    }
    //成员内部类定义在外部类的成员位置上
    //可以添加任意的访问修饰符，其地位就是一个成员
    public class Inner03{//成员内部类
        // 如果外部类和内部类成员重名，遵循就近原则,如果想访问外部类那个成员，可以使用（外部类.this.成员）去访问
        public void say(){
            //可以直接访问外部类的所有成员
            System.out.println("n1="+n1+",name="+name);
            hi();
        }
    }
    //方法
    public Inner03 getInner03Instance(){
        return new Inner03();
    }

    public void t1(){
        Inner03 inner03 = new Inner03();
        inner03.say();
    }
}